/*
 * PDD.h
 *
 *  Created on: 27/10/2011
 *      Author: utn_so
 */

#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <stdint.h>


void error (char * mensaje);

#ifndef PDD_H_
#define PDD_H_

int * abrirArchivo(int argc,char * path){

	int descriptor;
	 if (argc!=2) {
	    puts("Usar: mapear NombreArchivo");
	    exit(EXIT_FAILURE);
	    }

	if ((descriptor=open(path,O_RDWR))<0)
	    error("Fallo en la apertura (open)");


	return descriptor;
}


char * lectura_Sector(int * descriptor, int numeroSector){

	uint32_t tam_pagina= 4096;
	uint32_t bytes=512;
	uint32_t sectorXpagina=8;
	uint32_t pagina  = (numeroSector / sectorXpagina);
	struct stat estadobuf;
	char sector[512];
	char * map;

	uint32_t bytesXsector = 512;

	#define offset (numeroSector *512)

	fstat(descriptor,&estadobuf);

	if((map= mmap(NULL,bytesXsector,PROT_READ|PROT_WRITE,MAP_SHARED,descriptor,pagina*tam_pagina))==MAP_FAILED)
	error("Fallo al mapear (open)");


	posix_madvise(map+(numeroSector-(sectorXpagina*pagina))*bytesXsector,bytesXsector,POSIX_MADV_WILLNEED);
	memcpy(sector,map,bytesXsector);
	munmap(map,bytesXsector);

return sector;

}









void error (char * mensaje)
	{
	    perror(mensaje);
	    exit(EXIT_FAILURE);


	}



#endif /* PDD_H_ */
